home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1995 January / Simtel - 10000 MSDOS Shareware Programs (Walnut Creek)(January 1995)(Disc 2).ISO / disc2 / eel / curspos.e < prev    next >
Text File  |  1991-03-11  |  6KB  |  180 lines

  1. /************************************************************************
  2. * "Epsilon", "EEL" and "Lugaru" are trademarks of Lugaru Software, Ltd. *
  3. *                                    *
  4. *  Copyright (C) 1985, 1990 Lugaru Software Ltd.  All rights reserved.    *
  5. *                                    *
  6. * Limited permission is hereby granted to reproduce and modify this    *
  7. * copyrighted material provided that the resulting code is used only in    *
  8. * conjunction with Lugaru products and that this notice is retained in    *
  9. * any such reproduction or modification.                *
  10. *************************************************************************
  11. *  The previous copyright and trademark notice applies to some of the    *
  12. *  code herein. All other changes, enhancements and extension routines    *
  13. *                                    *
  14. *  Copyright (C) 1989, 1990 by Jonas H. Hedberg. All rights reserved.   *
  15. *                                    *
  16. *  These changes may be redistributed free allowed for any purpose    *
  17. *  providing both the Lugaru and my copyrights remain intact.        *
  18. *  I assume no liability for the use or inability to use        *
  19. *  this software. Neither do I take responsibility for any damage    *
  20. *  cased by this software extension.                    *
  21. *  This extension may NOT be redistributed for profit.            *
  22. *************************************************************************
  23. * File.......: CURSPOS.E                                                *
  24. * Ver........: 1.04                                                     *
  25. * Date.......: 1990-08-14                                               *
  26. * Epsilon ver: 5.0                                                      *
  27. * By.........: Jonas Hedberg                                            *
  28. *     Title..: Software Engineer                                        *
  29. *     Company: TEAMSTER AB                                              *
  30. *     Address: P.O. Box 8321                                            *
  31. *              S-402 79  GTEBORG                                        *
  32. *     Country: SWEDEN                                                   *
  33. *     Tel....: Int +46-31-22 22 65  (GMT + 1h)                          *
  34. *     Fax....: Int +46-31-22 75 46                                      *
  35. * Description: Show's current row and column at right bottom of the     *
  36. *              screen, undepending if the screen is 25, 43 or 50 rows.  *
  37. *              The function check if the screen is in color             *
  38. *              or mono mode, and it's use the echo-line color.          *
  39. *              The function is controled by the variable:               *
  40. *              show-cursor-position. When it's "1" the current row      *
  41. *              and column appears on the screen, and if it's "0",       *
  42. *              nothing happends. The cursor-position-mode command can   *
  43. *              be used to toggle between showing and not.               *
  44. * Algorithm..: Remember where you were last time, start from there and  *
  45. *              count your way forward or backword depending were you    *
  46. *              move to.                                                 *
  47. * Comments...:                                                          *
  48. * Change log                                                            *
  49. * Date      | Ver   | Change                                            *
  50. * ----------+-------+-------------------------------------------------- *
  51. * 15-Aug-90 | 1.01  | Added the "bazurk" test.                          *
  52. * 15-Aug-90 | 1.02  | Command cursor-position-mode.                     *
  53. * 11-Sep-90 | 1.03  | Add som more "AI" to the function current_row().  *
  54. * 27-Sep-90 | 1.04  | Check the shortest way to count in current_row(). *
  55. *           |       |                                                   *
  56. *           |       |                                                   *
  57. *           |       |                                                   *
  58. ************************************************************************/
  59.  
  60.  
  61. #include "eel.h"
  62. #include "lowlevel.h"
  63.  
  64. char show_cursor_position = 1;
  65. buffer int _prev_point = 0;
  66. buffer int _prev_row = 1;
  67.  
  68. command cursor_position_mode()
  69. {
  70.     if (show_cursor_position == 0) {
  71.         show_cursor_position = 1;
  72.     } else {
  73.         show_cursor_position = 0;
  74.     }
  75. }
  76.  
  77. do_show_cursor_position()
  78. {
  79.     if (show_cursor_position == 1) {
  80.         char cursor_position[25];
  81.         sprintf(cursor_position, "   r%d c%d         ", current_row(), current_column() + 1);
  82.         /* Check if screen is mono or color */
  83.         if (screen_mode == 0 || screen_mode == 2 || screen_mode == 7)
  84.             /* The screen is in monochrom mode */
  85.             term_write(screen_cols-15, screen_lines-1,cursor_position,15,mcolors[1],1);
  86.         else
  87.             /* Screen is in color mode */
  88.             term_write(screen_cols-15, screen_lines-1,cursor_position,15,colors[1],1);
  89.     }
  90. }
  91.  
  92. current_column()
  93. {
  94.     int start, column;
  95.  
  96.     start=point;
  97.     if (nl_reverse())
  98.         point++;
  99.     column = horizontal(start);
  100.     point = start;
  101.     return column;
  102. }
  103.  
  104. current_row()
  105. {
  106.     /* If current row has gone bazurk, fix it */
  107.     if ((_prev_point > size()) || 
  108.        (_prev_row <= 0) || 
  109.        ((_prev_point == 0) && (_prev_row != 1))) {
  110.         int row = 1, start = point;
  111.         point = 0;
  112.         while (nl_forward() && !user_abort && (point <= start)) {
  113.             row++;
  114.         }
  115.         goto Ready;
  116.     } else {
  117.         int row = _prev_row, start = point;
  118.  
  119.         /* Check if point is top of buffer */
  120.         if (point == 0) {
  121.             row = 1;
  122.             goto Ready;
  123.         }
  124.  
  125.         point = _prev_point;
  126.         
  127.         /* Check witch is the shortest way to count the current row */
  128.         if (point < (_prev_point - point)) {
  129.             point = 0;
  130.             while (nl_forward() && !user_abort && (point <= start)) {
  131.                 row++;
  132.             }
  133.             goto Ready;
  134.         }
  135.  
  136.         /* The move has been forward since last time */
  137.         if (start > _prev_point) {
  138.             while (nl_forward() && !user_abort && (point <= start)) {
  139.                 row++;
  140.             }
  141.         /* Whe have moved backward in the buffer */     
  142.         } else if (start < _prev_point) {
  143.             while (nl_reverse() && !user_abort && (point >= start)) {
  144.                 row--;
  145.             }
  146.         }
  147. Ready:
  148.         point = start;
  149.         check_abort();
  150.         if (!row)
  151.             row = row + 1;
  152.         /* Remember where we are */
  153.         _prev_point = point;
  154.         _prev_row = row;
  155.         return row;
  156.     }
  157. }
  158.  
  159. new_curspos_getkey()
  160. {
  161.     do_show_cursor_position();    /* Print row and col */
  162.  
  163.     return curspos_getkey();
  164. }
  165.  
  166. when_loading()
  167. {
  168.     sayput("CURSOR POSITION-module  Ver 1.04  (C) 1990 by Jonas Hedberg. Loading...");
  169.  
  170.     /* Change Epsilon's getkey() */
  171.     if (!find_index("curspos_getkey"))
  172.         replace_name("getkey", "curspos_getkey");
  173.     else
  174.         drop_name("getkey");
  175.     replace_name("new_curspos_getkey", "getkey");
  176.  
  177.     delay(300, COND_KEY);
  178. }
  179.             
  180.